package com.empsys.old.aspects;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @author wzm
 * @create 2023-12-16 9:35
 * project_name:web2310
 * @Description
 */
//定义aop操作类  用于对service方法进行执行时间的统计
//@Aspect //标识当前类是切面类 这样的话对特定方法进行的编程才会有效
//@Component
@Slf4j
public class MethodTime {

    //该方法用于针对service方法进行执行时间的统计
    /*
    * 方法上的注解 表示给原始方法进行什么样的编程 一般就是 前面  后面  环绕等...
    * @Around 就是在原始方法前后都运行相关的代码
    * execution切入点表达式  下面的执行代码是给那些方法用的
    * */
    @Around("execution(* com.empsys.service.impl.*.*(..))")
    public Object times(ProceedingJoinPoint pjp) throws Throwable {
        //获取方法运行开始的时间
        long begin = System.currentTimeMillis();

        //运行原始的方法
        Object proceed = pjp.proceed();

        //获取方法运行的结束时间   计算时长
        long end = System.currentTimeMillis();
        //时长
        log.info("方法运行的时间为：{}毫秒", end-begin);

        //原始方法返回值
        return proceed;
    }

}
